package com.qiaofang.housewarehouse.dao;


import java.util.List;

public interface HbaseDao {
    /**
     * 遍历查询hbase表(从 start_rowkey 到 stop_rowkey )
     *
     * @param tableName 表名
     * @param startRow  开始rowkey
     * @param stopRow   结束rowkey
     * @param cls       返回对象class
     * @param <T>
     * @return
     */
    <T> List<T> listObjByRow(String tableName, String startRow, String stopRow, Class cls) throws Exception;

    /**
     * 多个rowkey查询
     *
     * @param tableName 表名
     * @param rowKeys   rowkeyList
     * @param cls       返回对象class
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> List<T> listObjByRowKeys(String tableName, List<String> rowKeys, Class cls) throws Exception;

    /**
     * 单个rowkey查询
     *
     * @param tableName 表名
     * @param rowKey    rowKey
     * @param cls       返回对象class
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> T getObjByRowKey(String tableName, String rowKey, Class cls) throws Exception;

    /**
     * 插入一条记录
     *
     * @param t
     * @param tableName
     * @param rowKey
     * @throws Exception
     */
    void insertObject(Object t, String tableName, String rowKey) throws Exception;

    /**
     * 通过rowkey获取计数器对象
     *
     * @param tableName
     * @param rowKey
     * @param cls
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> T getObjIncByRowKey(String tableName, String rowKey, Class cls) throws Exception;

    /**
     * 根据rowkey 返回list对象
     * @param tableName 表名
     * @param startRow 开始rowkey
     * @param endRow 结束rowkey
     * @param cls 对象class
     * @param type 列返回的类型
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> List<T> listObjectByStartEndRow(String tableName, String startRow, String endRow, Class cls, String type) throws Exception;

    /**
     * 根据rowkeyFileter查询
     * @param tableName
     * @param rowkey
     * @param cls
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> List<T> getResultsByRowFilter(String tableName, String rowkey, Class cls) throws Exception;
    /**
     * 根据PrefixFilter查询
     * @param tableName
     * @param prefixRowkey
     * @param cls
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> List<T> getResultsByPrefixFilter(String tableName, String prefixRowkey, Class cls) throws Exception;
}
